package com.mab.mall.search.thread;

import java.util.concurrent.*;

/**
 * 线程池
 * * 通过Executors的静态方法
 * * 通过 new ThreadPoolExecutor方式创建
 */
public class ThreadPoolDemo {

    public static void main(String[] args) {
        // 线程池实现方式  直接获取
        ExecutorService service = Executors.newFixedThreadPool(10);

        // 第二种 直接new ThreadPoolExecutor()对象，并且手动的指定对应的参数
        /**
         * 参数含义：
         *      corePoolSize:线程池的核心线程数量 线程池创建出来后就会 new Thread() 5个
         *      maximumPoolSize:最大的线程数量，线程池支持的最大的线程数
         *      keepAliveTime:存活时间，当线程数大于核心线程，空闲的线程的存活时间 8-5=3
         *      unit:存活时间的单位
         *      BlockingQueue<Runnable> workQueue:阻塞队列 当线程数超过了核心线程数据，那么新的请求到来的时候会加入到阻塞的队列中
         *      new LinkedBlockingQueue<>() 默认队列的长度是 Integer.MAX 那这个就太大了，所以我们需要指定队列的长度
         *      threadFactory:创建线程的工厂对象
         *      RejectedExecutionHandler handler:当线程数大于最大线程数的时候会执行的淘汰策略
         */
        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
                5,100,10, TimeUnit.SECONDS,new LinkedBlockingQueue<>(10000)
                , Executors.defaultThreadFactory(),new ThreadPoolExecutor.AbortPolicy()
                );
        threadPoolExecutor.execute(()-> System.out.println("--------->"+Thread.currentThread().getName()));
    }

}
